package own.stu.jobgib.playown.netty.pdf_demo.demo1;

import java.util.concurrent.TimeUnit;

public class Shutdown1 {

    /**
     * java 优雅停机
     *
     *
     * 对于通过注册 ShutdownHook实现的优雅退出，需要注意如下几点，防止踩坑。
     * (1)ShutdownHook 在某些情况下并不会被执行，例如 JVM崩溃、无法接收信号量和kill -9 pid 等。
     * (2)当存在多个 ShutdownHook时，JVM无法保证它们的执行先后顺序。
     * (3)在 JVM 关闭期间不能动态添加或者去除 ShutdownHook。
     * (4)不能在ShutdownHook 中调用 System.exitO),它会卡住 JVM，导致进程无法退出。
     *
     * @param args
     * @throws Exception
     */
    public static void main(String[] args) throws Exception {
        Runtime.getRuntime().addShutdownHook(new java.lang.Thread(() ->
        {
            System.out.println("ShutdownHook execute start...");
            System.out.println("Netty NioEventLoopGroup shutdownGracefully...");
            try {
                TimeUnit.SECONDS.sleep(3);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println("ShutdownHook execute end...");
        }, ""));
        TimeUnit.SECONDS.sleep(7);
        System.exit(0);
    }
}